AWS IAM Identity Center の各グループに所属するユーザー一覧を出力してみた
AWS IAM Identity Center において、グループに所属しているユーザー一覧を作成したく、簡単なスクリプトを作成する機会があったため紹介します。
グループに所属しているユーザー一覧を出力
AWS CloudShell 上で実行できる AWS CLI コマンドとシェルスクリプトにした場合に分けて記載します。
AWS CLI コマンド
AWS CloudShell ですぐに出力したい場合は次のコマンドです。
STORE_ID=$(aws sso-admin list-instances --query "Instances[0].IdentityStoreId" --output text --no-paginate)
aws identitystore list-groups --identity-store-id ${STORE_ID} --query Groups[].[GroupId] --output text \
| while read group_id; do
group_name=$(aws identitystore describe-group --identity-store-id ${STORE_ID} --group-id ${group_id} --query DisplayName --output text)
aws identitystore list-group-memberships --identity-store-id ${STORE_ID} --group-id ${group_id} --query GroupMemberships[].MemberId[].[UserId] --output text \
| while read user_id; do
user_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query UserName --output text)
user_display_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query DisplayName --output text)
echo "${group_name},${user_name},${user_display_name}"
done
done
出力結果例です。出力結果は左から「グループ名」「ユーザー名」「表示名」となります。注意点として、ユーザーが所属していないグループは出力されません。
test,test-user,Test User
test,demo-user,Demo User
cm,cm-user,CM User
cm,test-user,Test User
シェルスクリプト
シェルスクリプトバージョンです。上記のコマンドをそのままコピーペーストしているのに加えて、csv 出力用にヘッダ行を出力するコマンドを入れています。csv として出力する場合はファイル名を指定してリダイレクトします。
#!/bin/bash
STORE_ID=$(aws sso-admin list-instances --query "Instances[0].IdentityStoreId" --output text --no-paginate)
echo "GroupDisplayName,UserName,UserDisplayName"
aws identitystore list-groups --identity-store-id ${STORE_ID} --query Groups[].[GroupId] --output text \
| while read group_id; do
group_name=$(aws identitystore describe-group --identity-store-id ${STORE_ID} --group-id ${group_id} --query DisplayName --output text)
aws identitystore list-group-memberships --identity-store-id ${STORE_ID} --group-id ${group_id} --query GroupMemberships[].MemberId[].[UserId] --output text \
| while read user_id; do
user_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query UserName --output text)
user_display_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query DisplayName --output text)
echo "${group_name},${user_name},${user_display_name}"
done
done
csv ファイルにリダイレクトする実行例です。上記のシェルスクリプトに groups.sh
という名前をつけています。
$ sh groups.sh > output.csv
出力結果例です。
GroupDisplayName,UserName,UserDisplayName
test,test-user,Test User
test,demo-user,Demo User
cm,cm-user,CM User
cm,test-user,Test User
コマンドの解説
コマンドの実行内容を簡単に記載します。
STORE_ID=$(aws sso-admin list-instances --query "Instances[0].IdentityStoreId" --output text --no-paginate)
aws identitystore list-groups --identity-store-id ${STORE_ID} --query Groups[].[GroupId] --output text \
| while read group_id; do
group_name=$(aws identitystore describe-group --identity-store-id ${STORE_ID} --group-id ${group_id} --query DisplayName --output text)
aws identitystore list-group-memberships --identity-store-id ${STORE_ID} --group-id ${group_id} --query GroupMemberships[].MemberId[].[UserId] --output text \
| while read user_id; do
user_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query UserName --output text)
user_display_name=$(aws identitystore describe-user --identity-store-id ${STORE_ID} --user-id ${user_id} --query DisplayName --output text)
echo "${group_name},${user_name},${user_display_name}"
done
done
AWS IAM Identity Center の AWS CLI は、実行時にアイデンティティストア ID を指定しなければいけないコマンドが多いため、最初に sso-admin list-instances
コマンドアイデンティティストア ID を取得します。
その後、list-groups
コマンドでグループ一覧を取得して、while 文により処理します。グループ名を identitystore describe-group
で取得し、各グループのユーザー一覧を identitystore list-group-memberships
で取得しています。取得したユーザー一覧に対しては、while 文で追加の後続処理をします。その際に対象ユーザーがいない場合は while 文内の処理が実行されないため、グループに所属しているユーザーがいない場合は出力されません。
各ユーザーに対しては、identitystore describe-user
コマンドでユーザー名と表示名を取得して出力します。identitystore list-group-memberships
コマンドの出力結果はユーザー ID であるためです。このあたりはもっと簡略化する方法があるかもしれません。
各コマンドのリファレンスです。AWS CLIv2 のみ記載しています。
- list-instances — AWS CLI 2.22.2 Command Reference
- list-groups — AWS CLI 2.22.2 Command Reference
- describe-group — AWS CLI 2.22.2 Command Reference
- list-group-memberships — AWS CLI 2.22.2 Command Reference
- describe-user — AWS CLI 2.22.2 Command Reference
さいごに
AWS IAM Identity Center の棚卸しのためにグループに所属しているユーザー一覧を取得する機会あったため AWS CLI を用いて出力してみました。棚卸しの際は、アクセス許可セットがアタッチされているグループとユーザーを出力できる aws-sso-utils
と併用すると作業を効率的に進められそうです。旧名の AWS SSO 時代のブログですが、aws-sso-utils
のやってみたブログもあります。
以上、このブログがどなたかのご参考になれば幸いです。